package offer.offer04;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 90, 14, 差值在5之内? 这种想法居然可以。
 */
public class Solution61 {
    public boolean isStraight(int[] nums) {
        List<Integer> numsNot0 = Arrays.stream(nums).boxed().collect(Collectors.toList());
        numsNot0.removeIf(i -> i == 0);//妙哇
        numsNot0.sort((a, b)-> a-b);
        boolean flag = true;
        flag = flag && numsNot0.get(numsNot0.size() - 1) - numsNot0.get(0) < 5;
        for(int i = 1; i < numsNot0.size(); i++){
            flag = flag && numsNot0.get(i) != numsNot0.get(i-1);
        }
        return flag;
    }

    //思路一样, 不过比较优雅
    public boolean isStraight2(int[] nums) {
        Set<Integer> repeat = new HashSet<>();
        int max = 0, min = 14;
        for(int num : nums) {
            if(num == 0) continue; // 跳过大小王
            max = Math.max(max, num); // 最大牌
            min = Math.min(min, num); // 最小牌
            if(repeat.contains(num)) return false; // 若有重复，提前返回 false
            repeat.add(num); // 添加此牌至 Set
        }
        return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
    }

    public static void main(String[] args) {
        int[] input = new int[]{0, 5, 0, 4, 5};
        System.out.println(new Solution61().isStraight(input));
    }
}
